package com.briup.ch13;

import java.lang.reflect.Constructor;

/**
 * @Author briup-adam
 * @Date 2023/10/30 上午10:23
 * @Description 通过反射获取构造器
 **/

public class ConstructorTest {
    public static void main(String[] args) {
        Class<Cat> catClass = Cat.class;
        //获取公共构造器
        Constructor<?>[] constructors = catClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        //获取所有的构造器  包含非公共的
        Constructor<?>[] declaredConstructors = catClass.getDeclaredConstructors();
        for (Constructor<?> constructor : declaredConstructors) {
            System.out.println(constructor);
        }
        //获取指定构造器 仅针对公共的
        try {
            Constructor<Cat> constructor = catClass.getConstructor(String.class,int.class,String.class,String.class);
            System.out.println(constructor);
            //获取指定构造器 包含私有的
            Constructor<Cat> constructor1 = catClass.getDeclaredConstructor(String.class);
            System.out.println(constructor1);

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        //通过字节码对象创建 字节码对象（Class）对应类型的
        //默认调用公共的无参构造器
        try {
            Cat cat = catClass.newInstance();
            System.out.println(cat);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }



    }
}
